home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / graphic / rtnews.zip / RTNEWS4 < prev    next >
Text File  |  1992-09-13  |  73KB  |  1,813 lines

  1.  
  2. _ __                 ______                         _ __
  3. ' )  )                  /                           ' )  )
  4.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  5. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  6.              /                               /|
  7.             '                               |/
  8.  
  9.             "Light Makes Right"
  10.  
  11.              September 5, 1988
  12.  
  13. Compiled by Eric Haines, 3D/Eye Inc, ...!hplabs!hpfcla!hpfcrs!eye!erich
  14. All contents are US copyright (c) 1988 by the individual authors
  15.  
  16. Contents:
  17.     Intro, by Eric Haines
  18.     Capsule Autobiographies, by lots of new people
  19.     SIGGRAPH '88 RT Roundtable Summary, by Paul Strauss and Jeff Goldsmith
  20.     Commercial Ray Tracing Software & SIGGRAPH, by Eric Haines & others
  21.     A Letter, Jeff Goldsmith
  22.     Best of USENET
  23.  
  24. -----------------------------------------------------------------------------
  25.  
  26. Intro
  27.  
  28.     Well, I'm back from my honeymoon, I've just moved into a new house, and
  29.     I have returned to work and am confronted with a heavy duty schedule.
  30.     However, the workstation's on the fritz for a few hours so here's my
  31.     chance to compile an issue of the RT News.
  32.  
  33.     Other major changes around here are that Michael Cohen (of radiosity
  34.     fame, and a subscriber) has begun his cross-country drive from Ithaca
  35.     to Salt Lake City.  He'll be continuing his education at the University
  36.     of Utah's computer graphics facility.  Roy Hall is taking over Michael's
  37.     place at the Cornell Program of Computer Graphics, and should be added to
  38.     this mailing list soon.  Andrew Glassner is now with Xerox PARC, and his
  39.     new address should be available by next issue, too.
  40.  
  41.     I plan to get another issue out within a week, as there is also an
  42.     interesting research idea that I need to talk about with a few people
  43.     before presenting it here.  Stay tuned...and please feel free to submit to
  44.     the next issue.
  45.  
  46. -----------------------------------------------------------------------------
  47.  
  48. Capsule Biographies
  49.  
  50.     What follows are short self-descriptions by various new people at the
  51.     roundtable at SIGGRAPH.  These are simply in the order I received them.
  52.     The latest address list (email and physical) is attached at the end of
  53.     this issue.
  54.  
  55.     By the way, if you never submitted an autobiographical sketch, (or if you
  56.     are doing something that's different from your last sketch) please feel
  57.     free to send one on to me for the next issue.
  58.  
  59.  
  60. # Russ Tuck - SIMD parallel algorithms and architectures for ray tracing
  61. # Computer Science Dept, Univ. of North Carolina
  62.  
  63. My dissertation research is on parallel methods of programming SIMD parallel
  64. computers.  I have developed a measure of program portability, and a system
  65. which lets the programmer specify in advance how portable a program must be.
  66. The compiler can then provide (and enforce) this amount of portability.  I
  67. call this an "optimally portable" programming system.  I'll be presenting my
  68. work at "Frontiers 88: The 2nd Symp. on the Frontiers of Massively Parallel
  69. Computation" in October.  Thinking about ways to do ray tracing (and radiosity)
  70. on massively parallel SIMD machines is a fun sidelight.  (Some of my ideas
  71. were in the June '88 hardcopy Ray Tracing News.)
  72.  
  73.  
  74. # Greg Ward - accuracy and realism, daylight, efficient light sources.
  75. # Lawrence Berkeley Laboratory
  76.  
  77. The purpose of my work is the development of more accurate calculations
  78. for lighting design and engineering.  Electric lighting contributes
  79. directly or indirectly to about 20% of the nation's energy
  80. consumption.  Although significant progress has been made in the area
  81. of energy-efficient light sources, wasteful installations frequently
  82. result from poor building design rather than low fixture efficiency.
  83. It is hoped that with better computational tools, architects and
  84. engineers will produce more energy-efficient designs.  I am currently
  85. working on a validated reflection model and method for measuring
  86. surface properties using a digitizing camera.  By streamlining the
  87. measurement process, it should be possible to obtain accurate
  88. simulations of designs using a realistic variety of construction
  89. materials.  I am also comparing the accuracy and applicability of
  90. different classes of lighting calculation, and exploring the use of
  91. animation in design visualization.
  92.  
  93.  
  94. # Pete Litwinowicz -- realistic image sythesis, etc.
  95. # Apple Computer, INC
  96.  
  97. Working on 3D animation, rendering and modelling at Apple.
  98.  
  99.  
  100. # Tom Malley - parallelism, complex scenes, space subdiv., shading methods
  101. # Evans & Sutherland Computer Corporation
  102.  
  103. My interests are primarily in how to make ray traced images that are
  104. significantly more realistic than the computer generated images we
  105. often see now. The complexity of the models must increase for realism.
  106. If we want to ray trace large databases on many processors, we must
  107. determine efficient ways to make pieces of the data set available
  108. dynamically to processors as they perform intersection searches.
  109. Additionally, I'm interested in analysis of reflection models to see
  110. where the typical simplifying assumptions steer us wrong, and what the
  111. alternatives may be.  I'd also like to see more closed loop
  112. comparisons of computer generated images with real scenes.
  113.  
  114.  
  115. # Chuck Grant - tracing fewer rays, coherency, antialiasing
  116. # Lawrence Livermore National Laboratory
  117.                                                                                
  118. I am interested in algorithms and data structures for most areas of image
  119. synthesis: visible surface algorithms, volumetric visualization, antialiasing,
  120. texturing, shading, etc., etc... Ray tracing is a big part of my interests but
  121. not all. I am currently working on a comparison of all existing visible surface
  122. algorithms, and have invented several new ones as a result. I am not interested
  123. in "Scientific Data Visualization" but the demands of my job make me spend a
  124. lot of time doing just that. I am finishing my PhD. in computer graphics at the
  125. University of California at Davis. 
  126.  
  127.  
  128. # Steve Stepoway -- efficient intersection calc., parallelism
  129.  
  130. My interests in ray tracing these days are centering around finding more
  131. efficient ray-object intersection calculations, as well as issues of
  132. parallelism in rendering. I am working with Sam Uselton (U. Tulsa) and
  133. Mark Lee (AMOCO) on developing some new space sub-division techniques
  134. (next year's SIGGRAPH paper).
  135.  
  136.  
  137. # Daniel Bass - Realism, diffraction & wavelength effects
  138. # Apollo Computer Inc.
  139.  
  140. [no autobiographical note]
  141.  
  142.  
  143. # Ken Joy - intersection tests, efficiency, coherency
  144. # Computer Graphics Research Lab, Computer Science Division,
  145. # University of California, Davis
  146.  
  147. [no autobiographical note]
  148.  
  149.  
  150. # Fred Fisher - realism, radiosity enhancements, ray tracing manufacturing
  151. #   databases
  152.  
  153. Hello. I'm now working at DEC doing electronics design for a
  154. geometry pipeline. My interest in ray tracing has involved rendering
  155. polygonal databases (presumably ones similar to those used in
  156. a quick-Gouraud-render CAD environment ). I've been writing a lot
  157. of software on my own (ray-tracing and otherwise) to understand the
  158. image synthesis process better, with the intent of designing hardware
  159. to help the rendering phase.
  160.  
  161.  
  162. # Pierre Poulin - illumination models, natural phenomenon
  163. # University of Toronto
  164. # Department of Computer Science
  165.  
  166. I am a graduate student working right now on a model for anisotropic reflection
  167. that would save the world and computing time. This should be my introduction in
  168. the fascinating science of the simulation of natural phenomenon (or how to 
  169. deceive the eye with less than 1 million polygons...).
  170.  
  171.  
  172. # Andrew C. Woo - intersection culling algorithms and complexity
  173. # University of Toronto
  174. # Department of Computer Science
  175.  
  176. I am currently a first year (fast approaching second year) master's student
  177. at the University of Toronto.  My current thesis work is on a new approach
  178. to shadow acceleration (beyond trans-warp drive, of course) and comparing
  179. it to existing shadow accelerators (eg. the impulse-power "light buffer"
  180. --> just kidding, Eric).
  181.  
  182.  
  183. # Chuan Chee  -  natural phenomena, ray tracing, animation
  184. # University of Toronto
  185. # Department of Computer Science
  186.  
  187. I am finishing my first year as a master's student at the University of
  188. Toronto.  I currently do not have a thesis topic.
  189.  
  190.  
  191. # Robert E. Webber, Prof. - ray tracing large databases of volume density data.
  192. # Computer Science Department
  193. # Rutgers University, Busch Campus
  194.  
  195. Am currently tuning a ray tracer that handles hierarchically arranged
  196. voxel data.  The basic unit of organization is a 16 by 16 by 16
  197. ``voxel'' block where each voxel contains 32 bits of information.
  198. This information is interpreted as either a density description of the
  199. contents of that voxel or a pointer to another voxel block
  200. representing a recursive decomposition of the current block.  16 by 16
  201. by 16 times 4 bytes means that my basic block is 16k, which is a size
  202. that fits our local disk system rather well from the point of view of
  203. i/o overhead.  The program is organized to allow the database to be
  204. spread over a number of files (max 255) thus avoiding the 4 gigabyte unix file
  205. size problem (since the pointers only have to be able to address the
  206. start of each 16k block, 32 bit pointers can address a terabyte of
  207. data -- should we ever be lucky enough to have it) as well as the
  208. problem of finding alot of space inside of a single disk partition.
  209. Rutgers currently organizes its computing around a cluster of a
  210. hundred networked Sun workstations including 2's, 3's, and 4's.
  211.  
  212. The current status of the system is that 5 megabyte scenes (roughly
  213. 400 blocks) representing densities at the 256 by 256 by 256 level have
  214. been ray traced.  Surface interpolation permitted images of
  215. demonstrating shadows, shading, and inter-reflection to be generated.
  216. Various techniques for determining the surface represented by a local
  217. cluster of voxel densities are being experimented with.  Will soon be
  218. running the ray tracer in parallel (don't expect much bus contention
  219. as the system is currently extremely cpu bound).  We are also
  220. installing some WORM drives locally and so soon expect to have yet
  221. another layer of memory hierarchy to fiddle with.
  222.  
  223.  
  224. # Michael Natkin
  225. # Brown University
  226.  
  227. No current paragrapho for now, as i'm rewriting our whole environment
  228. at the moment, no time for ray-tracing.
  229.  
  230. ---------
  231.  
  232. That's all for now, with about 6 people who are new but haven't contacted
  233. me yet.
  234.  
  235. -----------------------------------------------------------------------------
  236.  
  237. SIGGRAPH '88 RT Roundtable Summary, by Paul Strauss and Jeff Goldsmith
  238.  
  239. 0.  Women don't talk about ray tracing.
  240. 1.  It would be nice to have something that does both ray tracing and
  241.     radiosity.
  242. 2.  It would be nice to have caustics.
  243. 3.  It would be nice to do analytical anti-aliasing.
  244. 4.  Motion blur is a Good Thing.
  245. 5.  Adaptive subsampling don't work good.
  246. 6.  There are many ways to minimize ray-object intersection tests.
  247. 7.  Hardware would be nice.  Maybe later.
  248. 8.  We should use ray tracing for real applications.
  249.  
  250. -------------------------------------------------------------------------------
  251.  
  252. Commercial Ray Tracing Software and SIGGRAPH, by Eric Haines and others
  253.  
  254.     Last issue I listed all the commercially available ray tracers I knew as of
  255. SIGGRAPH.  There were a few new entries I saw this year:
  256.  
  257.     - ElectroGIG, from England, shown at the Meiko booth, is the first
  258.       commercial ray tracer based on using constructive solid geometry
  259.       that I've seen.
  260.  
  261.     - SoftImage, (the people with the nice rocks image) from Montreal,
  262.       had a nice looking Wavefront/Alias/etc-looking package with a ray
  263.       tracer.  They claim it was the fastest ray tracer on the floor (it
  264.       runs on a number of machines) and seemed to use octree subdivision.
  265.       I never got to see the demo, but people tell me that it was fast,
  266.       and that the programmer is a very careful and efficient coder.
  267.  
  268.     - Shima-Seiki, from Japan.  They claim to have a ray-tracer with
  269.       hardware assistance (whatever that means), though they're not
  270.       marketing it yet and couldn't tell us anything about it.  The
  271.       realtime texturing system from Mars, with lots of cool buttons and
  272.       knobs, was pretty impressive though.  System cost is $500K, $300K,
  273.       or "we haven't decided", depending on when you talked with them.
  274.  
  275.     - Ray Tracing Corp is now Ray Tracing Research Corp, and they released
  276.       a ray tracer for the Mac II for $895.
  277.  
  278.     - Apollo: not a product, but their ray tracer was fun to watch as a
  279.       demo of both the speed of their new DN10000 (not sure about the
  280.       number of zeros in that one) super-mini-super-workstation and of
  281.       Apollo's networking abilities.  Darn fast.
  282.  
  283.     - Silicon Graphics: also not a product, they had a very nice demo
  284.       (which, sadly, a number of their marketing people didn't know about)
  285.       showing a scene from a god's-eye point of view, with rays shooting
  286.       through the image plane and bouncing around.  The image would build
  287.       up scan line by scan line on both the image plane in the scene and
  288.       in a separate window.  You could also change the god's-eye view
  289.       interactively as the scene was being ray-traced.  Nice.
  290.  
  291.  
  292. Other things of interest:  AT&T Pixel Machines' ray tracer is now even faster,
  293. purely due to software tuning.  They plan to cut even more time by further
  294. changes.  "Sphereflake", which ran at about 30 seconds last year, now runs
  295. at around 16 seconds.  There is a public domain modeller which should be
  296. out in mid-October which will run on the Iris 3130 and on the Pixel Machine.
  297. It was developed by NASA (demoed at AT&T), and since they're governmental they
  298. can't make it a for-profit product.  In a month and a half contact their
  299. distributor, "COSMIC" (which stands for something), at 404-542-3265.  They
  300. won't really know much about it until then.
  301.  
  302. SGI showed radiosity images on the floor, though there is no announced product
  303. yet.  They seemed to have developed their own adaptive refinement technique.
  304. HP showed ray tracing film loops and stills, and radiosity images and on-the-fly
  305. adaptive refinement (which will be a product sometime this winter).  The new
  306. radiosity technique introduced by Cornell this year has the promise of being
  307. "radiosity for the rest of us".
  308.  
  309. Those were my major impressions (other than the usual "the art show was better
  310. this year", "course lunches were worse", etc) - anyone else care to add their
  311. two cents?
  312.  
  313.  
  314. Jeff Goldsmith points out:
  315.  
  316.     Cray Research has "Oasis," Gray Lorig's ray tracer, available,
  317. I think, for free.  Of course, you have to buy a Cray at $20 million
  318. first....
  319.  
  320.     I don't get it.  Why doesn't every CG Software vendor supply a
  321. ray tracer.  It's definitely the easiest renderer to write.  Yes,
  322. they are slo-o-o-o-o-o-w, but they sound glitzy and (I bet) would
  323. stimulate sales, even if buyers never used them.
  324.  
  325.  
  326. Gray Lorig responded to my query for info on Oasis:
  327.  
  328.   The current status of the Oasis package, which is basically a
  329. raytracing animation package, is it's an unsupported product.
  330. What that really means is that we will give it to Cray customers
  331. for free, give them updates every once and a while, and provide
  332. support only when I feel like it.
  333.  
  334.  
  335. John Peterson says:
  336.  
  337.   I would add RenderMan to your list of commercial ray tracers - I think you
  338. can explicitly implement classical ray tracing by writing some code in their
  339. magic shading language.
  340.  
  341. Also, the ray tracer I wrote at Utah is (or at least may be) commercially
  342. available.  It specializes in ray tracing NURB (B-spline) surfaces, and 
  343. supports the usual suspects of features (refract/flection, shadows (with
  344. penumbra), texture mapping, anti-aliasing (with stochastic sampling) and
  345. motion blur).  It comes bundled with a geometric modelling system called
  346. Alpha_1, distributed by Engineering Geometry Systems in Salt Lake City.
  347.  
  348. The contact is:
  349.     Engineering Geometry Systems
  350.     275 East South Temple, Suite 305
  351.     Salt Lake City, UT, 84111
  352.  
  353. I think the price is something like $10K for commerical sites and < $1K for
  354. government or university sites.  The ray tracer isn't available separately,
  355. but the modelling package is so full of goodies it's worth looking at in its
  356. own right.
  357.  
  358. -------------------------------------------------------------------------------
  359.  
  360. A Letter [my response is in brackets]
  361.  
  362.    1) A student of mine found a typographical error in
  363. your "Intro to Ray Tracing" notes.  (I gave him some
  364. pages from same to teach him about texture mapping; good
  365. job!)  In Equation set E11, the third line should
  366. read: Qvy = -Nb/Dv2 rather than Nc.  I noted that you didn't
  367. catch it in this years' issue.  (Better typesetting, though.)
  368. Thanks for publishing that.
  369.  
  370. [Thanks!  If anyone else notices typoes, omissions, or anything else that bugs
  371. them in the "Intro" SIGGRAPH notes, please contact Andrew Glassner or me
  372. or the individual author ASAP.]
  373.  
  374.  
  375.     2) Does anyone know where I can obtain 2D wood texture maps?
  376. FTP, email, tape, disc, whatever, is fine.
  377.  
  378. [Any leads, anyone?  I'm interested, too.]
  379.  
  380. -- Jeff Goldsmith
  381.  
  382. -------------------------------------------------------------------------------
  383.  
  384. Best of USENET
  385. ---- -- ------
  386.  
  387. [What follows are things posted to USENET that might be of interest here.
  388. Many readers either don't receive USENET or haven't the time to perform chaff
  389. separation.  What follow are my own winnowings. - EAH]
  390.  
  391. -------------------------
  392.  
  393. Thomas Palmer writes:
  394.  
  395. Has anyone done any work on vectorizing ray-object intersection
  396. calculations?  The vectorizing C compiler on a Cray X/MP will not
  397. (automatically) vectorize loops smaller than about 5 or 6 iterations
  398. (nor should it - the vector register load time outweighs the gain).
  399. Typical ray tracing vector operations involve vectors of length 3 or 4.
  400.  
  401.   -Tom
  402.  
  403.  Thomas C. Palmer    NCI Supercomputer Facility
  404.  c/o PRI, Inc.        Phone: (301) 698-5797
  405.  PO Box B, Bldg. 430    Uucp: ...!uunet!ncifcrf.gov!palmer
  406.  Frederick, MD 21701    Arpanet: palmer@ncifcrf.gov
  407.  
  408. -----
  409.  
  410. >From: spencer@tut.cis.ohio-state.edu (Stephen Spencer)
  411. Subject: Re: Vectorizing ray-object intersection calculations
  412. Organization: Ohio State Computer & Info Science
  413.  
  414. There was an article in IEEE CG&A about four years ago about vectorizing
  415. ray-sphere intersections on a Cyber which included an algorithmic workup 
  416. of how it worked.
  417.  
  418. As far as ray-polygon intersection goes, the article in SIGGRAPH '87 dealing
  419. with tesselation of polygonal objects (it had the pictures of grass and the
  420. Statue of Liberty in it) included the algorithm for fast ray-polygon 
  421. intersection, and I did implement it and it did vectorize quite nicely. 
  422. I unfortunately no longer seem to have that piece of code, but it wasn't 
  423. difficult.  Of course you still have to do the sorting of the intersection
  424. points but the heavy intersection calculations can be done quickly.
  425.  
  426. -----------------
  427.  
  428. >From: u-jmolse%sunset.utah.edu@utah-cs.UUCP (John M. Olsen)
  429. Newsgroups: comp.graphics
  430. Subject: Polygon teapot ftp'able
  431. Summary: Come 'n get it.
  432. Organization: University of Utah, Computer Science Dept.
  433.  
  434. One of the kind and generous People In Charge compressed the Utah Teapot
  435. and has made it available (for a week or so) as ~ftp/pub/teapot.Z so those
  436. who want the polygon version of it can get it now.  It compressed to about
  437. 270K from 990K, so it's not too bad to transfer.  The machine name is
  438. cs.utah.edu.  Have fun with it, and let me know if you have any problems
  439. getting it transferred.
  440.  
  441. Just so I don't get hate mail, and you don't think your software is 
  442. broken:  The Utah teapot
  443. was designed with a hole in the bottom.  I had forgotten about this,
  444. but was reminded by someone (Jean Favre?) who rendered it.
  445.  
  446. -----------------
  447.  
  448. From: markv@uoregon.uoregon.edu (Mark VandeWettering)
  449. Newsgroups: comp.graphics
  450. Subject: Ray Tracer: Part 01/01
  451. Organization: University of Oregon, Computer Science, Eugene OR
  452. Lines: 2353
  453.  
  454. Here is the first release of my totally whiz-bang ray tracer.  Okay, so
  455. it isn't TOTALLY whiz bang, but it does have some nice features.  It
  456. uses bounding volumes, has cones, spheres, polygons and cylinders as
  457. primitives, reads Eric Haines NFF file format images and more....
  458.  
  459. Use it, abuse it, sell it, but be sure to have fun with it.  I had alot
  460. of fun hacking on it.   If any of you find bugs, or better yet fix bugs
  461. and add features, send them to me, and I will try to get them worked
  462. into a future release which I hope might make it into comp.sources.unix.
  463.  
  464. [ code not included here:  either get it from USENET, or you can write Mark
  465. or myself for a copy.  The source weighs in at about 55K bytes.]
  466.  
  467. -----------------
  468.  
  469. Reply-To: kjohn@richp1.UUCP (John K. Counsulatant)
  470. Organization: RICH Inc. , Franklin Park,IL
  471.  
  472.     If anyone is interested in *other* ray tracers, I
  473. have source to DBW Render (an excellent ray tracer ported from the VAX to
  474. the Amiga) and Tracer (a crude spheres only (but a good starter :-) tracer
  475. for the Amiga).  I am in the process of obtaining QRT (quick ray tracer (if
  476. there is such a thingee ;-)) source (also for the Amiga).
  477.  
  478. I can be reached at:
  479.  
  480. RealTime (prefered):  1(312)418-1236  (6pm to 10:30pm central time)
  481.  
  482. USmail:               John Kjellman             E-Mail: kjohn@richp1.UUCP
  483.                       17302 Park Ave.
  484.                       Lansing IL 60438
  485.  
  486. -----------------
  487.  
  488. Reply-To: sean@ms.uky.edu (Sean Casey)
  489. Organization: The Leaning Tower of Patterson Office @ The Univ. of KY
  490.  
  491. In article <2660@uoregon.uoregon.edu> markv@drizzle.UUCP (Mark VandeWettering) writes:
  492. >    Isn't DBW Render copyrighted?  I believe the source code may not
  493. >    be redistributed, I tried to obtain the sources, but aborted
  494. >    because of the restriction on use/redistribution.
  495.  
  496. The first release of DBW Render was freely redistributable. I believe it
  497. even found it's way to a Fish disk. The story I hear is of an evil employer
  498. seeing $$$ and telling Dave that since he wrote it on the company computer
  499. it belongs to the company and that no further releases may be given away.
  500.  
  501. The current release uses "Look Up A Word In The Manual" type copy
  502. protection, the most annoying kind I have experienced to date.
  503.  
  504. If someone really wants to pay for an Amiga ray tracer, I'd send him in the
  505. direction of one of Turbo Silver, Videoscape 3D, or Sculpt 3D, all excellent
  506. products. These products are in fierce competition with each other, and get
  507. better all the time. I saw a pamphlet in Turbo Silver that had an ad for a
  508. fascinating terrain generator module.  Just think, combine a high quality
  509. terrain generator and the logistics of a board wargame...
  510.  
  511. Oh yeah, I hear that some of the commercial Amiga ray tracing software is
  512. being ported to the Mac II. These products have been around for a while, so
  513. it's a good chance for Mac users to get their hands on some already-evolved
  514. ray-tracing software.
  515.  
  516. Sean
  517. -- 
  518. ***  Sean Casey                        sean@ms.uky.edu,  sean@ukma.bitnet
  519. ***  (Looking for his towel)           {backbone|rutgers|uunet}!ukma!sean
  520. ***  U of K, Lexington Kentucky, USA   Internet site? "talk sean@g.ms.uky.edu"
  521. ***  ``With a name like Renderman, you know it's good jam.''
  522.  
  523. -----------------
  524.  
  525. Reply-To: kyriazis@turing.cs.rpi.edu (George Kyriazis)
  526. Organization: RPI CS Dept.
  527.  
  528.         Hello world!  I have been using ray tracers for quite some time now,
  529. and I have made many changes to some of them, so I though it was time for
  530. me to write a ray tracer.  So there it is!  It is not supposed to be fast
  531. or anything, but I think it is well commented and easy to understand.
  532. It is very simple also.
  533.         I am willing to give it to anyone that wants it.  Unfortunately,
  534. I don't think I can put it in a place where people can ftp to, so if you
  535. want it, please send me mail.  I'm sure I can put it in some public place
  536. later.
  537.         The ray tracer currently supports only spheres, with ambient,
  538. diffuse, specular lighting, together with reflections and refractions.
  539. I don't use any in-line code for the vector routines, but subroutines, for
  540. readability.
  541.         Hope someone will want to play around with it.
  542.  
  543.   George Kyriazis
  544.  
  545. ------------------------------
  546.  
  547. Postscript Ray Tracer, John Hartman and Paul Heckbert
  548.  
  549. [This was published in the last hardcopy RT News.  Here it is again, for those
  550. not inclined to type a lot]
  551. Reply-To: jhartman@miro.Berkeley.EDU (John H. Hartman)
  552. Organization: University of California, Berkeley
  553.  
  554.   Ever worry about all those cycles that are going to waste every night when
  555. you shut off your laserwriter? Well, now you can put them to good use.
  556. Introducing the world's first PostScript ray tracer. Just start it up, wait
  557. a (long) while, and out comes an image that any true graphics type would
  558. die laughing over. As it is currently set up it will trace a scene with
  559. three spheres and two lights. The image resolution is 16x16 pixels.
  560.   Warning: the code is a real kludge. I'm not sure there is much you can
  561. change without breaking it, but you're welcome to try. If, by chance, you
  562. are able to improve the running time please send us the improved version.
  563.   psray.ps is the ray tracer. result.ps is what a 16x16 image should look
  564. like.
  565.   Have fun.
  566.  
  567. -----------------------------------------------------------------------
  568. John H. Hartman         jhartman@ernie.berkeley.edu
  569. UCB/CSD                ucbvax!ernie!jhartman
  570.  
  571.  
  572.  
  573. # to unpack, cut here and run the following shell archive through sh
  574. # contents: psray.ps result.ps
  575. #
  576. echo extracting psray.ps
  577. sed 's/^X//' <<'EOF10807' >psray.ps
  578. X%!
  579. X% Copyright (c) 1988  John H. Hartman and Paul Heckbert
  580. X%
  581. X% This source may be copied, distributed, altered or used, but not sold for 
  582. X% profit or incorporated into a product except under licence from the authors.
  583. X% This notice should remain in the source unaltered.
  584. X%   John H. Hartman jhartman@ernie.Berkeley.EDU
  585. X%   Paul Heckbert   ph@miro.Berkeley.EDU
  586. X
  587. X%    This is a PostScript ray tracer. It is not a toy - don't let the kids 
  588. X%  play with it. Features include: shadows, recursive specular reflection
  589. X%  and refraction, and colored surfaces and lights (bet you can't tell!).
  590. X%  To use this thing just send it to your favorite Postscript printer.
  591. X%  Then take a long nap/walk/coffee break/vacation. Running time for
  592. X%  a recursive depth of 3 and a size of 16x16 is about 1000 seconds
  593. X%  (roughly 20 minutes) or 4 seconds/pixel. 
  594. X%    There are a few parameters at the beginning of the file that you can
  595. X%  change.  The rest of the code is pretty indecipherable. It is translated
  596. X%  from a C program written by Paul Heckbert, Darwyn Peachey, and Joe Cychosz
  597. X%  for the Minimal Ray Tracing Programming Contest in comp.graphics in
  598. X%  May 1987.  Some changes have been made to improve the running time.
  599. X%  Don't even bother trying to figure out how this works if you are looking
  600. X%  for a good example of a ray tracer.
  601. X%
  602. X/starttime usertime def
  603. X/DEPTH 3 def   % recursion depth
  604. X/SIZE 16 def   % image resolution
  605. X/TIMEOUT SIZE dup mul 10 mul cvi 120 add def  % approximately 10 sec/pixel
  606. X/NUM_SPHERES 5 def
  607. X/AOV 25.0 def    % angle of view
  608. X/AMB [0.02 0.02 0.02] def  % ambient light
  609. X% list of spheres/lights in scene
  610. X%            x    y    z     r   g   b   rad  kd   ks  kt   kl  ir
  611. X/SPHERES [[[ 0.0  6.0  0.5] [1.0 1.0 1.0] 0.9 0.05 0.2 0.85 0.0  1.7]
  612. X          [[-1.0 8.0 -0.5] [1.0 0.5 0.2] 1.0 0.7  0.3 0.0  0.05  1.2]
  613. X          [[ 1.0 8.0 -0.5] [0.1 0.8 0.8] 1.0 0.3  0.7 0.0  0.0   1.2]
  614. X      [[ 3.0 -6.0 15.0] [1.0 0.8 1.0] 7.0 0.0  0.0 0.0  0.6  1.5]
  615. X      [[-3.0 -3.0 12.0] [0.8 1.0 1.0] 5.0 0.0  0.0 0.0  0.5  1.5]
  616. X     ] def
  617. X
  618. Xstatusdict begin
  619. XTIMEOUT setjobtimeout
  620. X/waittimeout TIMEOUT def
  621. Xend
  622. X/initpage {
  623. X   /Courier findfont
  624. X   10 scalefont setfont
  625. X} def
  626. X
  627. X/X 0 def
  628. X/Y 1 def
  629. X/Z 2 def
  630. X/TOL 5e-4 def
  631. X/BLACK [0.0 0.0 0.0] def
  632. X/WHITE [1.0 1.0 1.0] def
  633. X/U 0.0 def
  634. X/B 0.0 def
  635. X% index of fields in sphere array
  636. X/cen 0 def
  637. X/col 1 def
  638. X/rad 2 def
  639. X/kd 3 def
  640. X/ks 4 def
  641. X/kt 5 def
  642. X/kl 6 def
  643. X/ir 7 def
  644. X/NEG_SIZE SIZE neg def
  645. X/MATRIX [SIZE 0 0 NEG_SIZE 0 SIZE] def
  646. X/vec {3 array} def
  647. X/VU vec def
  648. X/vunit_a 0.0 def
  649. X
  650. X% dot product, two arrays of three reals
  651. X/vdot {
  652. X   aload pop 
  653. X   4 -1 roll
  654. X   aload pop 
  655. X   4 -1 roll mul
  656. X   2 -1 roll 4 -1 roll mul add
  657. X   3 -2 roll mul add
  658. X} def
  659. X
  660. X% vcomb, sa, a, sb, b  returns new array of sa*a + sb*b
  661. X
  662. X/vcomb {  
  663. X   aload pop
  664. X   4 -1 roll dup dup
  665. X   5 1 roll 3 1 roll mul
  666. X   5 1 roll mul
  667. X   4 1 roll mul 3 1 roll 
  668. X   5 -2 roll aload pop
  669. X   4 -1 roll dup dup
  670. X   5 1 roll 3 1 roll mul
  671. X   5 1 roll mul
  672. X   4 1 roll mul 3 1 roll 
  673. X   4 -1 roll add 5 1 roll 
  674. X   3 -1 roll add 4 1 roll
  675. X   add 3 1 roll
  676. X   vec astore 
  677. X} def
  678. X
  679. X/vsub {
  680. X   aload pop
  681. X   4 -1 roll aload pop
  682. X   4 -1 roll sub 5 1 roll 
  683. X   3 -1 roll sub 4 1 roll
  684. X   exch sub 3 1 roll
  685. X   vec astore 
  686. X} def
  687. X
  688. X/smul {
  689. X   aload pop
  690. X   4 -1 roll dup dup
  691. X   5 1 roll 3 1 roll mul
  692. X   5 1 roll mul
  693. X   4 1 roll mul 3 1 roll 
  694. X   vec astore
  695. X} def
  696. X
  697. X/vunit {
  698. X   /vunit_a exch store
  699. X   1.0 vunit_a dup vdot sqrt div vunit_a smul
  700. X} def
  701. X
  702. X/grayscale {
  703. X   % convert to ntsc, then to grayscale
  704. X   0.11 mul exch
  705. X   0.59 mul add exch
  706. X   0.30 mul add
  707. X   255.0 mul
  708. X   cvi
  709. X} def
  710. X
  711. X
  712. X/intersect { % returns best, tmin, rootp
  713. X   7 dict begin
  714. X   /d exch def
  715. X   /p exch def
  716. X   /best -1 def
  717. X   /tmin 1e30 def
  718. X   /rootp 0 def
  719. X   0 1 NUM_SPHERES 1 sub {
  720. X      /i exch def
  721. X      /sphere SPHERES i get def
  722. X      /VU sphere cen get p vsub store
  723. X      /B d VU vdot store
  724. X      /U B dup mul VU dup vdot sub sphere rad get dup mul add store
  725. X      U 0.0 gt
  726. X      {
  727. X     /U B U sqrt sub store
  728. X     U TOL lt 
  729. X     {
  730. X        /U 2.0 B mul U sub store
  731. X        /B 1.0 store
  732. X     }
  733. X     { /B -1.0 store } 
  734. X     ifelse
  735. X     U TOL ge 
  736. X     U tmin lt and
  737. X     {
  738. X        /best i store
  739. X        /tmin U store
  740. X        /rootp B store
  741. X     }
  742. X     if
  743. X      }
  744. X      if
  745. X   } for
  746. X   best tmin rootp
  747. X   end
  748. X} def
  749. X
  750. X/trace {
  751. X   13 dict begin
  752. X   /d exch def
  753. X   /p exch def
  754. X   /level exch def
  755. X   /saveobj save def
  756. X   /color AMB vec copy def
  757. X   /level level 1 sub store
  758. X   p d intersect
  759. X   /root exch def
  760. X   /v exch def
  761. X   /s exch def
  762. X   -1 s ne
  763. X   {
  764. X      /sphere SPHERES s get def
  765. X      /p 1.0 p v d vcomb store
  766. X      /n
  767. X      sphere cen get p 
  768. X      root 0.0 lt { exch } if 
  769. X      vsub vunit def
  770. X      sphere kd get 0.0 gt
  771. X      {
  772. X     0 1 NUM_SPHERES 1 sub
  773. X     {
  774. X        /i exch def
  775. X        /light SPHERES i get def
  776. X        light kl get 0.0 gt
  777. X        {
  778. X           /VU light cen get p vsub vunit store
  779. X           /v light kl get 
  780. X           n VU vdot 
  781. X           mul store
  782. X           v 0.0 gt
  783. X           p VU intersect
  784. X           /B exch store
  785. X           /nd exch def
  786. X           i eq
  787. X           and
  788. X          { /color 1.0 color v light col get vcomb def } 
  789. X           if
  790. X        } if
  791. X     } for
  792. X      } if
  793. X      color aload pop
  794. X      sphere col get aload vec copy /VU exch store 
  795. X      4 -1 roll mul
  796. X      5 1 roll
  797. X      3 -1 roll mul
  798. X      4 1 roll
  799. X      mul
  800. X      3 1 roll
  801. X      color astore pop
  802. X      /nd d n vdot neg store
  803. X      /color 
  804. X      sphere ks get
  805. X      sphere kd get color sphere kl get VU vcomb
  806. X      0 level eq
  807. X     { BLACK vec copy}
  808. X     { level p 1.0 d 2 nd mul n vcomb trace vec astore }
  809. X      ifelse
  810. X      1.0 3 -1 roll vcomb store
  811. X      root 0.0 gt
  812. X     { /v sphere ir get store }
  813. X     { /v 1.0 sphere ir get div store }
  814. X      ifelse
  815. X      /U 1 v dup mul 1 nd dup mul sub mul sub store
  816. X      U 0.0 gt
  817. X      {
  818. X     /color 
  819. X     1.0 color sphere kt get
  820. X     0 level eq
  821. X        { BLACK vec copy}
  822. X        { level p v d v nd mul U sqrt sub n vcomb trace vec astore }
  823. X     ifelse
  824. X     vcomb store
  825. X      } if
  826. X   } if
  827. X   color aload pop
  828. X   saveobj restore
  829. X   end
  830. X} def
  831. X
  832. X/main {
  833. X   initpage
  834. X   /data SIZE dup mul string def
  835. X   /half SIZE 0.5 mul def
  836. X   /i 0 def
  837. X   /dy half AOV cvr 0.5 mul dup cos exch sin div mul def
  838. X   /temp vec def
  839. X   0 1 SIZE 1 sub
  840. X   {
  841. X      /y exch def
  842. X      0 1 SIZE 1 sub
  843. X      {
  844. X     /x exch def
  845. X         data i
  846. X     /saveobj save def
  847. X     VU X x cvr half sub put 
  848. X     VU Y  dy put
  849. X     VU Z half y cvr sub put
  850. X     DEPTH BLACK VU vunit trace 
  851. X         grayscale 
  852. X     saveobj restore
  853. X           put
  854. X     /i i 1 add store
  855. X      } for
  856. X   } for
  857. X   gsave
  858. X   100 300 translate 400 400 scale SIZE SIZE 8 MATRIX {data} image
  859. X   grestore
  860. X   100 200 moveto
  861. X   (Statistics: ) show
  862. X   100 190 moveto
  863. X   (Size: ) show SIZE 10 string cvs show
  864. X   100 180 moveto
  865. X   (Depth: ) show DEPTH 3 string cvs show
  866. X   100 170 moveto
  867. X   (Running time: ) show usertime starttime sub 1000 div 20 string cvs show
  868. X   showpage 
  869. X} def
  870. X/main load bind
  871. Xmain
  872. Xstop
  873. EOF10807
  874. echo extracting result.ps
  875. sed 's/^X//' <<'EOF10808' >result.ps
  876. X%!
  877. X/picstr 16 string def
  878. X100 300 translate
  879. X400 400 scale
  880. X16 16 8 [16 0 0 -16 0 16]
  881. X{currentfile picstr readhexstring pop} image
  882. X0505050505050d0e1114140505050505
  883. X050505050518231c1136472c05050505
  884. X0505050528231b262729364b58050505
  885. X05050525251c0e2528280e3a52550505
  886. X050505241b0c0d0d0d0d0d0c3c540505
  887. X050505080a0b0b0c0c0b0b0b0a080505
  888. X0505620608090a0a0a0a090908072805
  889. X056873170607070808080707060c2e2a
  890. X57676e94050505060606060505752d29
  891. X525e6456310505050505050514722825
  892. X45512f2e2b0a06050505050111141420
  893. X35402726240b0b0b0509040410111119
  894. X1e2c1e1d1b0b0b0b050904040c0d0d0c
  895. X0b121312100b0b0b0504040407080807
  896. X050b0b0b0b0b0b050505040404040404
  897. X05050505050505050505050505050505
  898. Xshowpage
  899. EOF10808
  900. exit
  901.  
  902. -------------------------------------------------------------------------------
  903.  
  904. END OF RTNEWS
  905.  
  906.  _ __                 ______                         _ __
  907. ' )  )                  /                           ' )  )
  908.  /--' __.  __  ,     --/ __  __.  _. o ____  _,      /  / _  , , , _
  909. /  \_(_/|_/ (_/_    (_/ / (_(_/|_(__<_/ / <_(_)_    /  (_</_(_(_/_/_)_
  910.              /                               /|
  911.             '                               |/
  912.  
  913.             "Light Makes Right"
  914.  
  915.              September 11, 1988
  916.  
  917. Compiled by Eric Haines, 3D/Eye Inc, ...!hplabs!hpfcla!hpfcrs!eye!erich
  918. All contents are US copyright (c) 1988 by the individual authors
  919.  
  920. Contents:
  921.     Intro
  922.     Capsule Autobiographies, by more new people
  923.     The Continuing Saga of MTV's Raytracer, by Mark VandeWettering
  924.     Public Domain Ray Tracer Q & A, by Mark VandeWettering
  925.     Public Domain Ray Tracer Utilities, by Tom Vijlbrief
  926.     Sorting Unnecessary on Shadow Rays for Kay/Kajiya?
  927.     by Eric Haines and Mark VandeWettering
  928.     Summary of Replies to Vectorizing Ray-Object Intersection Query,
  929.     by Tom Palmer
  930.     The Ray Tracer I Wrote, by George Kyriazis
  931.     New Bitmaps Library Available, Jef Poskanzer
  932.  
  933. -----------------------------------------------------------------------------
  934.  
  935. Intro
  936.  
  937.     Let's see, there's Whitted's, VandeWettering's, Kyriazis', Ohta's,
  938. Hartman/Heckbert's, "Pearl" on the Amiga & Atari, and a whole slew of them by
  939. Heckbert and friends (the Minimal Ray Tracer contest on USENET) - we're now at
  940. the point where the number of public domain ray tracers cannot be counted on
  941. one hand (and that's even if you count all the minimal RTs from Paul Heckbert's
  942. contest as worth one).  If nothing else, this proves ray tracing's a pretty
  943. trivial algorithm in its simplest form.
  944.  
  945.     I had hoped to talk with Tim Kay about a project he proposed at the ray
  946. tracing roundtable at SIGGRAPH this year, but he's in New York until the 20th.
  947. The kernel of the idea that he proposed was setting up ftp space on one of the
  948. Caltech computers and letting people check in their test ray-tracers there.
  949.  
  950.     In the meantime this issue quickly filled up with biographical sketches
  951. and the winnowings of USENET, especially Mark VandeWettering's efforts.  His
  952. ray tracer looks fairly nice, doing much more than spheres - check it out!
  953.  
  954. -- Eric
  955.  
  956. -----------------------------------------------------------------------------
  957.  
  958. Biographical Sketches, old and new
  959.  
  960.  
  961. # Ben Trumbore - photorealism, efficiency, interactive ray tracing
  962. # Cornell University Program of Computer Graphics staff
  963.  
  964. Greetings!  I am a candidate from the Reformed Radiosity party.  My campaign
  965. pledge:  I will not be satisfied until computer generated images are
  966. indistinguishable from photographs.  Like all right-thinking Americans, I
  967. believe ray tracing is the means to this end.  Better images at better
  968. runtimes!  And I strenuously deny allegations that I spend too much time
  969. working with stochastic textures - every modern life needs balance.  I foresee
  970. a world where interaction and ray tracing live in harmony, and I want you to
  971. be a part of that world.  Thank you!
  972.  
  973. --------------
  974.  
  975. A few more new people have joined our ranks since last issue.
  976.  
  977. #
  978. # Tom Palmer - applied ray tracing: realism & modeling for molecular graphics
  979. # National Cancer Institute
  980. # P.O. Box B  Bldg 430
  981. # Frederick, MD 21701
  982. # (301) 698-5797
  983. alias tom_palmer palmer@ncifcrf.gov
  984.  
  985. I'm currently interested in vectorizing ray-object intersection calculations.
  986. However, my primary interest is in applied ray tracing.  The wide variety of
  987. primitives and the realistic rendering make ray tracing an ideal (if slow)
  988. method for creating images of extremely complex molecular models.  I'm
  989. currently working with a (chemist) collaborator experimenting with visualizing
  990. electon density, electrostatic potential, molecular orbitals, etc. via ray
  991. tracing primitives.
  992.  
  993.  
  994. A note from Tom Palmer:
  995.  
  996. Doug Turner has left UNC and is now with Apple in Cupertino doing ray casting
  997. and textures on their Cray.  I would guess his email address to be
  998. turner@apple.com, but don't hold me to it.
  999.  
  1000. --------------
  1001.  
  1002. #
  1003. # Phillip Getto - Real-time radiant energy simulation :-), sampling,
  1004. #                 object-oriented rendering, efficient intersections calcs.
  1005. # CII 7309
  1006. # Center for Interactive Computer Graphics
  1007. # Rensselaer Polytechnic Institute
  1008. # 110 8th St.
  1009. # Troy, NY 12180-3590
  1010. # (518) 276-6491
  1011. alias    phil_getto    phil@yy.cicg.rpi.edu
  1012.  
  1013. --------------
  1014.  
  1015. #
  1016. # George Kyriazis - parallel ray-tracing
  1017. # ECSE Dept., JEC,
  1018. # R.P.I.,
  1019. # Troy, NY 12180
  1020. # e-mail: kyriazis@turing.cs.rpi.edu
  1021. #    kyriazis@yy.cicg.rpi.edu
  1022. alias    george_kyriazis    kyriazis@yy.cicg.rpi.edu
  1023.  
  1024. I will (pretty soon) be parallelizing a ray tracer to work with an AT&T Pixel
  1025. Machine.  One of the problems there will be sharing pixels when doing
  1026. anti-aliasing.  Stochastic sampling may be considered.  Also implementing
  1027. algorithms for high hit/miss ratio in intersection calculations.
  1028.  
  1029. --------------
  1030.  
  1031. #
  1032. # Stephen Spencer - accurate diffuse light calculation, antialiasing
  1033. # The Ohio State University Advanced Computing Center for the Arts and Design
  1034. # 1224 Kinnear Road
  1035. # Columbus Ohio  43212
  1036. # (614) 292-3416
  1037. alias    stephen_spencer    spencer@tut.cis.ohio-state.edu
  1038.  
  1039. Currently employed by The Ohio State University Advanced Computing Center for
  1040. the Arts and Design as a Graphics Research Specialist I designing graphics
  1041. software for research and instructional use by students and staff working in
  1042. computer animation and industrial design.  Graphics interests include ray-
  1043. tracing (somewhat obviously) and radiosity, and improving the realism of
  1044. computer-generated images in general.
  1045.  
  1046. --------------
  1047.  
  1048. # Greg Turk - rendering equation & tracing from lights
  1049. # UNC at Chapel Hill
  1050. # P.O. Box 26
  1051. # Chapel Hill, NC 27514
  1052. # (919) 962-1918
  1053. alias greg_turk turk@unc.cs.edu
  1054.  
  1055. I'm currently looking at ways to speed up collision detection for complex
  1056. objects.  I'm betting that collision detection can be made fast enough to
  1057. be useful for interactive graphics applications, and I plan to see how far
  1058. I can get on Pixel-planes, my favorite one-of-a-kind graphics engine.
  1059.  
  1060. --------------
  1061.  
  1062. #
  1063. # Roy Hall
  1064. # Program of Computer Graphics
  1065. # 120 Rand Hall
  1066. # Cornell University
  1067. # Ithaca, NY 14853
  1068. # (607)255-6711
  1069. alias    roy_hall    roy@wisdom.tn.cornell.edu
  1070.  
  1071.     I've been writing renderer's commercially for some time and have
  1072.     been concentrating on efficiency and eas of use.  Recently I returned
  1073.     to academics as faculty at Cornell.  I expect to be pursuing research
  1074.     for a variety of rendering techniques, ray tracing being high on the
  1075.     list.  Just finished a book "Illumination and Color in Computer
  1076.     Generated Imagery" - pub. by Springer-Verlag - should be out Sept
  1077.     or Oct.  In addition to graphics research I'm teaching architecture
  1078.     classes in lighting and acoustics, and computer applications to 
  1079.     architecture.
  1080.  
  1081. --------------
  1082.  
  1083. #
  1084. # Mark VandeWettering
  1085. # Master's Student
  1086. # University of Oregon Computer And Information Sciences
  1087. # markv@cs.uoregon.edu
  1088. alias    mark_vandewettering    markv@cs.uoregon.edu
  1089.  
  1090. I am currently interested in most aspects of raytracing, radiosity and
  1091. realistic image synthesis.  I am the author of a public domain raytracer
  1092. that has been distributed via USENET and is available from me via e-mail
  1093. and via anonymous ftp.  I am interested in developing a "library" of
  1094. public domain code for doing image synthesis, and learning as much as I
  1095. can in the mean time.
  1096.  
  1097. To download my raytracer, ftp to drizzle.cs.uoregon.edu (128.223.4.1)
  1098. and login as ftp, with your name as a password.  The README file in the
  1099. pub directory can guide you further.
  1100.  
  1101.  
  1102. [by way of introduction, attached is Mark's reply to some of my comments about
  1103. his ray tracer]
  1104.  
  1105. I would be pleased to see my raytracer compared to other raytracers.  I am not
  1106. a "serious" graphics person, my Master's thesis work is in functional
  1107. programming languages and parallelism, but I do seem to spend alot of my off
  1108. hours trying to hack graphics stuff.
  1109.  
  1110. I chose Kajiya/Kay bounding volumes because they seemed much simpler than
  1111. octree methods, and still offered good speed.
  1112.  
  1113. As for all your suggestions:
  1114.  
  1115.     - The `t' option is not mentioned the `?' options list. [This option
  1116.     prints out a `.' after each scan-line is computed]
  1117.  
  1118.     Thanks, will include it.  I just hacked -t in to get some idea
  1119.     of how fast the raytracer was...
  1120.  
  1121.     - how does your implementation of Kay/Kajiya work?  That is, what
  1122.       sorting algorithm is going on with insert/delete that ensures you
  1123.       of getting the lowest key at the beginning of the list?  It's been
  1124.       but 10 years since I last studied sorting algorithms, so I am
  1125.       not up-to-date on what your scheme is all about (the powers of
  1126.       two comparisons and swaps).
  1127.     
  1128.     I use a simple heap implementation and use it as a priority
  1129.     queue.  I forget which data structures book I hauled it out of,
  1130.     but it isn't the most efficient in the world.  But then again,
  1131.     when I profiled it, it wasn't in the "Top Ten Most Deadly" list
  1132.     either, so I guess its okay for now.  The next release will try
  1133.     to document it better.
  1134.  
  1135.     - More comments throughout the code would be a plus.  If you spend an
  1136.       hour or two now, you'll save us all a lot of time.  Most of the stuff
  1137.       looks fairly straightforward, but stuff like the Kay queue sort
  1138.       could use at least a reference as to where to go next.
  1139.     
  1140.     Guilty as charged.  That is why I didn't try to post it to
  1141.     comp.sources.unix.  The next release will be cleaned up,
  1142.     commented, and have a better Makefile.
  1143.  
  1144. You comments on the lighting model are good, the lighting model needs to be
  1145. reworked at least slightly, and probably a lot more than slightly.  I haven't
  1146. got to it yet, but it is coming.
  1147.  
  1148. Compilation and link problems: I have a much more generic Makefile for it, but
  1149. I accidently distributed my "totally hacked one".  The next release will
  1150. probably be configurable to a wider variety of systems.
  1151.  
  1152. I have already received mail from a person at Tek Research Labs who is possibly
  1153. thinking of adapting my raytracer to their new Motorola 88000 based workstation
  1154. as a demo.  I said he could send me one if it sold any :-) I am glad to see my
  1155. effort so warmly received, and treated with some level of enthusiasm.  Nobody
  1156. has come back and said "Gosh, how stupid" so I will probably wish to extend
  1157. some further effort to keep it up.
  1158.  
  1159. -----------------------------------------------------------------------------
  1160.  
  1161. The Continuing Saga of MTV's Raytracer, by Mark VandeWettering
  1162.  
  1163. I thought I would take the time to present a list of the software
  1164. that I am making available via anonymous ftp.  All these things have
  1165. been distributed via netnews over the past few years, so I dusted them
  1166. off and made them available.
  1167.  
  1168. I encourage anyone who has some interesting programs to contribute to
  1169. send me mail.  Unfortunately, I cannot allow people to upload directly,
  1170. because our space is VERY tight here (the anonymous ftp login puts you
  1171. in a subdirectory of mine, and I have a puny quota), but I would like to
  1172. maintain a library of freely distributable source code for computer
  1173. graphic applications.  I hope to have viewers for sun and X11 soon, as
  1174. well as an imagen printer dump.  Anyone working on such things, write me
  1175. if you would like to have your work distributed.
  1176.  
  1177. Anyway, here is the current contents of the directory ~/pub on
  1178. drizzle.cs.uoregon.edu (128.223.4.1):
  1179.  
  1180. -cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut-cut
  1181.  
  1182.  
  1183.  
  1184. This directory contains:
  1185.  
  1186.     raytrace.shar        my raytracer as it was posted to usenet's
  1187.                 comp.graphics group
  1188.  
  1189.     rpi-tracer.shar        A raytracer written by George Kyriazis,
  1190.                 posted to comp.graphics.
  1191.                 
  1192.     teapot.nff.Z        compressed nff file of the famous
  1193.                 "teapot", as patches for the above
  1194.                 raytracer.
  1195.  
  1196.     mini-ray.shar        The winner to paul heckbert's minimal
  1197.                 raytracing contest.  Wow!  Fits on a
  1198.                 screen, once it has been "raped".
  1199.  
  1200.     ohta-tracer.shar    A REALLY FAST spheres only raytracer.
  1201.                 Was originally posted to comp.graphics.
  1202.  
  1203.     haines.shar        A slightly out of date version of Eric
  1204.                 Haines' NFF Standard Procedural Database
  1205.                 stuff.  I am working on getting the
  1206.                 latest and greatest from netlib, but
  1207.                 they seem to be slow.
  1208.  
  1209. Any questions or bugs with this software can be send to markv@cs.uoregon.edu.
  1210.  
  1211. Thank you,
  1212.  
  1213. Mark
  1214.  
  1215. -----------------------------------------------------------------------------
  1216.  
  1217. Public Domain Ray Tracer Q & A, by Mark VandeWettering
  1218.  
  1219. Reply-To: markv@drizzle.UUCP (Mark VandeWettering)
  1220. Organization: University of Oregon, Computer Science, Eugene OR
  1221.  
  1222. [Mark's public domain RT was posted to USENET a week or two ago.  This is a
  1223. note he posted to USENET just recently.]
  1224.  
  1225.  
  1226. First of all thanks to everyone who has expressed an interest in my raytracer.
  1227. I wish to address some questions globally rather than to each individual.
  1228.  
  1229. Q:    The raytracer seems to work, but how do I display it on my XXX
  1230.     brand workstation?
  1231.  
  1232. A:    Well, there are many answers to this.  We only have black and
  1233.     white sun workstations here, so I have to display my images on
  1234.     an ancient and probably quite rare Tek4115 graphics terminal
  1235.     which has only 8 bitplanes.  
  1236.  
  1237.     What I do is take the output of this raytracer, and pipe it
  1238.     through a program to convert it to the Utah Raster Toolkit
  1239.     format that we use here at the U of O.  We have several programs
  1240.     to display these files on a wide variety of devices.  The utah
  1241.     Raster Toolkit is available via anonymous FTP from cis.utah.edu,
  1242.     or you can send them some amount of money, and they can make you
  1243.     a tape (I don't have exact details here).
  1244.  
  1245.     The only problem with this is the guts of my conversion program
  1246.     are not original, they consist of some code that Eugene Miya
  1247.     posted to this group awhile ago (never write what you can beg,
  1248.     borrow or steal!), and I would have to contact him before I
  1249.     distributed said program.  Also you would have to get the Utah
  1250.     Raster stuff as well.
  1251.  
  1252.     If I get enough mail to warrant posting this stuff, and if I can
  1253.     verify it with Eugene Miya, I will post my programs.
  1254.  
  1255.     My advice:  Don't bother hacking pic.c too much.  Write a
  1256.     program to display general raster images of an rgb bitmap to
  1257.     whatever device you have on hand.  Use dithering if you want
  1258.     black and white.  And then POST such programs, so that others
  1259.     can use/improve them.
  1260.  
  1261. Q:    Where can I get Eric Haines' NFF package?
  1262.     
  1263. A:    Simple:  I will be reposting it right after this message.
  1264.  
  1265. Q:    Does anyone have any nifty NFF file objects to trace?
  1266.  
  1267. A:    Well, I just converted the teapot to NFF file format (using
  1268.     faceted polygons) but it is pretty big.  If someone can suggest
  1269.     an anonymous FTP site where I could put some of these, as well
  1270.     as other revisions to my programs, I would make them available
  1271.     from there.
  1272.  
  1273. Q:    What else am I working on?
  1274.     
  1275.     Well, I would like to add motion blur, and statistically
  1276.     optimized anti-aliasing.  I added code so that you can specify
  1277.     colors by name rather than by guessing colors.  Parametric
  1278.     patches, tori, and surfaces of revolution would be nice to add
  1279.     too. As soon as I feel the raytracer has been significantly 
  1280.     extended, I will repost.
  1281.  
  1282. Finally, a bug fix (courtesy of Cameron Elliot):
  1283.  
  1284. Your program will crash on some machines unless you do the following...
  1285. (The buf array was too small.)
  1286.  
  1287. Modify screen.c:
  1288.  
  1289. /* Was before cam...
  1290.     [Ed:  Gadzooks, Mark can sure be stupid sometimes....]
  1291.         curbuf = (Pixel *) malloc (xres * sizeof (Pixel)) + 1 ;
  1292.         buf = (Pixel *) malloc (xres * sizeof (Pixel)) + 1;
  1293. */
  1294.         curbuf = (Pixel *) malloc ((xres+1) * sizeof (Pixel)) ;
  1295.         buf = (Pixel *) malloc ((xres+1) * sizeof (Pixel));
  1296.  
  1297.         ---
  1298.         Cameron Elliott        Portable Cellular Communications
  1299.         Path: ...!uw-beaver!tikal!ptisea!cam
  1300.  
  1301. Thanks again for the bug fix, and the nice comments!
  1302.  
  1303. Keep the mail coming!  
  1304.  
  1305. Mark VandeWettering
  1306.  
  1307. -----------------------------------------------------------------------------
  1308.  
  1309. Public Domain Ray Tracer Utilities, by Tom Vijlbrief
  1310.  
  1311. >From: tom@tnosoes.UUCP (Tom Vijlbrief)
  1312. Newsgroups: comp.graphics
  1313. Organization: TNO Institute for Perception, Soesterberg, The Netherlands
  1314.  
  1315. In article <2683@uoregon.uoregon.edu> markv@drizzle.UUCP (Mark VandeWettering) writes:
  1316.  
  1317. >    My advice:  Don't bother hacking pic.c too much.  Write a
  1318. >    program to display general raster images of an rgb bitmap to
  1319. >    whatever device you have on hand.  Use dithering if you want
  1320. >    black and white.  And then POST such programs, so that others
  1321. >    can use/improve them.
  1322.  
  1323. This is a posting of two programs which convert the output
  1324. of the raytracing program to Sun rasterfile format.
  1325.  
  1326. Ray2sun maps to greyscale.
  1327.  
  1328. Cray2sun maps to color (3 bit red, 3 bit green and 2 bit blue)
  1329.  
  1330. The program Ray2sun works fine, but Cray2sun should be much smarter
  1331. to produce better quality pictures.  (E.g. use dithering...)
  1332.  
  1333. Tom
  1334.  
  1335. Tom Vijlbrief
  1336. TNO Institute for Perception
  1337. P.O. Box 23                Phone: +31 34 63 62 77
  1338. 3769 DE  Soesterberg            E-mail: tnosoes!tom@mcvax.cwi.nl
  1339. The Netherlands                    or:    uunet!mcvax!tnosoes!tom
  1340.  
  1341. [Code is 200+ lines, so is left out.  Either check USENET or write Tom or
  1342. me for the code. - Eric]
  1343.  
  1344. ------------------------------------------------------------------------------
  1345.  
  1346. Sorting Unnecessary on Shadow Rays for Kay/Kajiya?
  1347.     by Eric Haines and Mark VandeWettering
  1348.  
  1349. [What follows is a discussion (still ongoing - please do add your two cents)
  1350. between Mark and I about the Kay/Kajiya efficiency scheme.  Mark uses
  1351. Kay/Kajiya in his ray tracer for shadow rays, which I feel is superfluous.
  1352. It's a minor point, as the sorting, as Mark points out, is usually not a
  1353. killer as far as where the time is spent.  However, it was worth it to me
  1354. as I found I misunderstood a part of the algorithm and found a better way
  1355. (I think) to implement Kay/Kajiya than was originally presented.  Tim Kay:
  1356. care to comment?]
  1357.  
  1358. Eric's first note:
  1359.  
  1360. - Note that Kay/Kajiya sorting is unnecessary for shadow rays.  This
  1361.   is because you don't care about the closest object, but rather
  1362.   whether any object blocks the light.  As soon as you get a shadow
  1363.   test hit, you can skip the rest of the intersection test - you're
  1364.   done.
  1365.  
  1366. ----------------
  1367.  
  1368. Mark's reply:
  1369.  
  1370.     Is this totally correct?  What we want to know is if there is a
  1371.     shadow between the light source and the point we hit.  If we
  1372.     sort the list, we can stop when we find the first item, but we
  1373.     can also stop when the bounding volumes or the intersection are
  1374.     greater than the distance to the shadow (the point isn't
  1375.     shadowed)  Because the heap insertion/deletion routines take so
  1376.     little time, it would seem that this would be a good
  1377.     optimization.  But yes, I agree that some optimization of shadow
  1378.     rays could be made.
  1379.  
  1380. ----------------
  1381.  
  1382. Eric's response:
  1383.  
  1384. The way a sorted list is created is to intersect a BV, get its distance, and
  1385. put its children on the list using this distance as a key.  For shadowing, the
  1386. distance to the light acts as the maximum cutoff from the start.  So, when a BV
  1387. is intersected it is either beyond the light or not.  If beyond, its children
  1388. are not put on the candidate list.  If not beyond, the children can be placed
  1389. anywhere within the candidate list (since we want any intersection).
  1390. Essentially, there should never be anything on the candidate list which is
  1391. keyed as having a distance beyond the light.  Only when you actually test the
  1392. candidate can you tell if it is beyond, at which point you throw it out.  So,
  1393. there should never be a point where you can say "all these candidates are
  1394. beyond the light", as such candidates should not be on the test list, no matter
  1395. whether the list is sorted or not.  QED, the sorting is unneeded.  I should
  1396. mention that Jeff Goldsmith also figured this out independently - has anyone
  1397. else noticed that sorting is unnecessary for shadowing?
  1398.  
  1399. Kay/Kajiya is something of a Catch-22 (but a great method, nonetheless), since
  1400. the sort key is the candidate's parent's distance, and what we really would
  1401. like is to have the sort key be the candidate's distance.  To get this distance
  1402. we intersect the candidate.  Now we have the distance (if any) we would have
  1403. liked to used to sort the candidate, but it's too late: we've intersected the
  1404. candidate and so taken it off the candidate list (possibly replacing it with
  1405. its children).
  1406.  
  1407. However, there might actually be a slight gain in practice if the list is
  1408. sorted by distance for shadow rays.  Say you have two bounding volumes, each
  1409. with N objects.  If both BV's are intersected, and the further bounding volume
  1410. contains the light, then it's probably worth intersecting the objects in the
  1411. closer BV first.  This is because the further bounding volume probably contains
  1412. objects which are beyond the light, while the closer one has objects more or
  1413. less between the light and the test point.  I believe this gain is negated by
  1414. the following counter-argument: what if the closer BV contains the intersection
  1415. point, and the further does not contain the light or the intersection point?
  1416. By the previous logic, we should intersect the further BV's children first.
  1417. "Scene dependence" seems to be the key phrase here: are your shadowing objects
  1418. closer to the intersection point (e.g. a board with a bunch of nails pounded
  1419. into it seems worth testing the closer nails first), or closer to the light
  1420. source (e.g. the light source has a lampshade).
  1421.  
  1422. In light (ho ho) of this, I maintain that Kay & Kajiya sorting is unnecessary
  1423. for shadow rays.  However, there are certainly other interesting sorting
  1424. strategies worth considering for shadow rays.  Some possibilities:
  1425.  
  1426.   - Object complexity (i.e. if you have a choice, try intersecting the
  1427.     sphere before trying the spline surface).
  1428.   - Object size (big objects cast big shadows.  This idea actually
  1429.     helps enhance "shadow caching", where the last object to shadow a
  1430.     light is then tested first for the next shadow ray for that light.
  1431.     A big object will have more shadow coherence and so will result
  1432.     in less having to find another shadowing object.  Say a light is
  1433.     blocked by both a sphere and a fine mesh of polygons.  The sphere
  1434.     will have much more shadow coherence than each polygon, resulting
  1435.     in many fewer misses).
  1436.   - Function sorting.  I haven't thought about this much, but one might be
  1437.     able to come up with a function which simulates the probability
  1438.     that a given object will be intersected.  The function could be based
  1439.     on the closest intersection distance, or the farthest, or some of each.
  1440.     One possible theory:  BV's which neither overlap the light or the
  1441.     intersection point have a higher probability of containing a shadowing
  1442.     object, for the reasons given earlier.
  1443.  
  1444. Anyway, just some thoughts. - Eric Haines
  1445.  
  1446. ----------------
  1447.  
  1448. Mark's response:
  1449.  
  1450.     > The way a sorted list is created is to intersect a BV, 
  1451.     > get its distance, and put its children on the list using 
  1452.     > this distance as a key.  
  1453.  
  1454. This isn't the way it is currently implemented in my raytracer, and
  1455. glancing back at Kay/Kajiya, it seems contrary to their intent as well.
  1456. If I intersect the parent volume, I intersect with the bounding volume
  1457. of each of the children, and use THAT distance as the key for insertion.
  1458. This does seem to require alot more bounding box intersections, but
  1459. still has exactly the same number of ray/object intersections.  
  1460.  
  1461. > Kay/Kajiya is something of a Catch-22 (but a great method,
  1462. > nonetheless), since the sort key is the candidate's parent's distance,
  1463. > and what we really would like is to have the sort key be the
  1464. > candidate's distance.  To get this distance we intersect the
  1465. > candidate.  Now we have the distance (if any) we would have liked to
  1466. > used to sort the candidate, but it's too late: we've intersected the
  1467. > candidate and so taken it off the candidate list (possibly replacing it
  1468. > with its children).
  1469.  
  1470. I think that this argument falls in light of my correction above.  Each
  1471. time an object is queued, it is keyed by the actual distance to its own
  1472. bounding volume, not the distance to the parent.
  1473.  
  1474. My feeling is that if you add the proper cutoffs, that Kajiya/Kay
  1475. testing for shadows is still just about the same cost as not bothering
  1476. to sort.   I actually implemented early cutoffs within the framework of
  1477. Kajiya/Kay BVs, and it only gave an improvement of 2% on average for the
  1478. Standard Procedural Database objects.  This DOESN'T mean that it is
  1479. correct, because I am uncertain just how "typical" the SPD stuff is, but
  1480. it would seem to be that for certain objects, the gain is small.
  1481.  
  1482. ----------------
  1483.  
  1484. Eric's response:  Well, I made a semantic error.  Kay/Kajiya calls a
  1485. "candidate" an object (real or BV) whose bounding volume has been hit and
  1486. whose children have not been intersected.  So, you're right in that the
  1487. algorithm does put an intersected BV on the list as a candidate, and not
  1488. its children.  In practical terms this will mean less sorting: you only
  1489. have to insert the intersected BV into the list, and not all its children
  1490. (all of which have the same key).  My confusion arose from the fact that
  1491. Kay/Kajiya puts a bounding volume around every object, which I don't (a simple
  1492. triangle or a sphere is about the same to intersect than a bounding box, and
  1493. a BV around a sphere (which is a BV, after all), seems excessive).
  1494.  
  1495.     Interestingly enough, looking over the original paper, I now have to agree
  1496. with you:  sorting on shadow rays using their original algorithm makes sense.
  1497. However, I have found that there is an inefficiency in the Kay/Kajiya algorithm
  1498. as presented at SIGGRAPH (which I never noticed before):  in their figure 7,
  1499. where they outline the algorithm, (page 275 of the SIGGRAPH '86 proceedings)
  1500. it is stated, "if the ray hits the BV, insert the child into the heap".  Then
  1501. when they get to the "while" loop they state that "while heap is non-empty and
  1502. distance to top node < t" the loop should be performed.  Seems to me that they
  1503. are inserting children which could be immediately culled.  I believe a faster
  1504. algorithm results from:
  1505.  
  1506.     If the ray hits the bounding volume and distance < t
  1507.         Insert the child into the heap
  1508.  
  1509. In other words, if the distance to the BV is greater than the present t (which
  1510. is the closest intersection distance of a real object), its child can
  1511. immediately be discarded (instead of inserting it into the heap).
  1512.  
  1513.     Using this slight modification of Kay/Kajiya now means that sorting is
  1514. unnecessary.  In the original, it was worth checking the distance because
  1515. objects which were beyond the present t distance (for shadowing, the distance to
  1516. the light) were actually inserted on the heap.  By realizing that these
  1517. children have no business on the heap (they're beyond the light, right?) and
  1518. not inserting them in the first place, there is then no reason to sort what
  1519. is then actually put on the heap.
  1520.  
  1521. [This is where things stand for now.  My original mistake of misreading Kay
  1522. and Kajiya was partly due to my using a more efficient algorithm:  not adding to
  1523. the heap if the child cannot possibly be hit.  I had never noticed that this
  1524. was not how they wrote it up, as I assumed they would compare all intersections
  1525. against the closest real intersection distance. - Eric]
  1526.  
  1527. ------------------------------------------------------------------------------
  1528.  
  1529. Summary of Replies to Vectorizing Ray-Object Intersection Query, by Tom Palmer
  1530.  
  1531. From: palmer@ncifcrf.gov (Thomas Palmer)
  1532. Newsgroups: comp.graphics
  1533.  
  1534.  
  1535. This is a summary of the replies I received to my query regarding
  1536. vectorizing ray-object intersection calculations.
  1537.  
  1538. ----------------
  1539.  
  1540. >From: stan!dodge!dave@boulder.Colorado.EDU (Dave Plunkett)
  1541.  
  1542.    You might try any of:
  1543.  
  1544.    "The Vectorization of a Ray Tracing Program for Image Generation", 
  1545.    with J.M. Cychosz and M.J. Bailey.
  1546.    Cyber 200 Applications Seminar, NASA Goddard, October 1983.
  1547.    
  1548.    "Ray Tracing on a Cyber 205",
  1549.    Conference Proceedings VIM-40, 
  1550.    San Francisco, CA, April 1984.
  1551.    
  1552.    "A Vectorized Ray Tracing Algorithm", 
  1553.    Masters Thesis,
  1554.    Purdue University, West Lafayette, IN.  August 1984.
  1555.    
  1556.    "The Vectorization of a Ray Tracing Algorithm for Improved Execution Speed",
  1557.    with M.J. Bailey.  IEEE Computer Graphics and Applications,
  1558.    Vol. 5, No. 8, August 1985.
  1559.  
  1560.    The last two of these are more readily accessible.  These papers describe my
  1561. Master's research, a vectorized ray tracing algorithm for use on csg objects
  1562. that was written using explicit vector syntax on the 205.  If you have any
  1563. specific questions, I'd be glad to answer any that I can.
  1564.  
  1565. Dave Plunkett
  1566. Solbourne Computer, Inc.
  1567. Longmont, CO 80501
  1568. (303) 772-3400
  1569. ...sun!stan!dave
  1570.  
  1571. ----------------
  1572.  
  1573. >From: 3ksnn64@ee.ecn.purdue.edu (Joe Cychosz)
  1574.  
  1575. I have developed a vectorized ray tracing package for the CYBER 205.  Part of
  1576. the work is discussed in Plunkett's CG&A paper.  Nelson Max also had a paper on
  1577. vectorized intersections of height fields used to produce Carlos' Island.  Saul
  1578. Youseff at Florida State has also been doing some work using raytracing for
  1579. collector plate design.
  1580.  
  1581. Both Plunkett and myself use a ray queue to collect rays, and then vectorize
  1582. such that serveral rays are intersected with an object.  This approach does
  1583. make it difficult to implement these accelerated ray traces such as Mike
  1584. Kaplan's "Constant Time Ray Tracing".
  1585.  
  1586. I have a variation of Kaplan's approach that sub-divides the object space and
  1587. uses bit operators to elliminate unnecessary intersection calculations.
  1588.  
  1589. Joe Cychosz
  1590.  
  1591. ----------------
  1592.  
  1593. >From: mcvax!tokaido.irisa.fr!priol@uunet.UU.NET (Thierry Priol -- Equipe Hypercubes)
  1594.  
  1595. There are few works on vectorization of the ray-object intersection.  One of
  1596. these works was done by Plunkett on a CDC-CYBER. The reference is:
  1597.  
  1598. [reference same as in Plunkett's note]
  1599.                          
  1600. Personally, I work in ray-tracing on a parallel MIMD (hypercube iPSC/2)
  1601. computer.
  1602.  
  1603. Thierry PRIOL
  1604. Institut de Recherche en Informatique et Systemes Aleatoires
  1605. Campus de Beaulieu
  1606. 35042 RENNES CEDEX
  1607. FRANCE
  1608. e-mail : mcvax!inria!irisa!priol
  1609.  
  1610. ---------------------
  1611.  
  1612. >From: mbc@a.cs.okstate.edu (Michael Carter)
  1613.  
  1614.      The real problem in the inner ray tracing loop is not ray-object
  1615. intersections, but ray-bounding volume intersections.  If you refer to the
  1616. article by Kay and Kajiya from SIGGRAPH '86, they describe a method of breaking
  1617. down the OBJECT space into a hierarchical data structure, and intersecting rays
  1618. against simple bounding volumes constructed from sets of planes.  This method
  1619. queries the objects in the order that they occur along the ray, therefore, NO
  1620. SORTING IS NEEDED.  It takes at least three pairs of planes to completely
  1621. enclose an object, therefore this intersection calculation could be done
  1622. efficiently, in parallel (on perhaps more than one object at a time!)  on a
  1623. vector machine.  Most of the time is spent in this ray-bounding volume
  1624. intersection loop, and not in the ray-object intersection algorithms.
  1625.  
  1626.      I realize that this is not something that the C compiler can do
  1627. on its own, but remember: no pain -- no gain.  (-:
  1628.  
  1629. -- 
  1630. Michael B. Carter
  1631. Department of Electrical and Computer Engineering, Oklahoma State University
  1632. UUCP:  {cbosgd, ea, ihnp4, isucs1, mcvax, pesnta, uokvax}!okstate!mbc
  1633. ARPA:  mbc%okstate.csnet@csnet-relay.arpa
  1634.  
  1635.  
  1636. [The statement "NO SORTING IS NEEDED" appears to be in error - sorting is an
  1637. integral part of the Kay & Kajiya algorithm. - Eric H.]
  1638.  
  1639. ----------------
  1640.  
  1641. >From: spencer@tut.cis.ohio-state.edu (Stephen Spencer)
  1642.  
  1643. [included in last issue]
  1644.  
  1645. ----------------------------------------------------------------------------
  1646.  
  1647. The Ray Tracer I Wrote, by George Kyriazis
  1648.  
  1649. From: kyriazis@rpics (George Kyriazis)
  1650. Newsgroups: comp.graphics
  1651. Organization: RPI CS Dept.
  1652.  
  1653.     Since I had too many requests for my ray tracer, I am posting it
  1654. here [USENET].  Hope that will help people that can't get mail to me.  I finally
  1655. had the source put so people can read it, but it's not definite that it'll
  1656. stay where it is.  Right now it is on life.pawl.rpi.edu (128.113.10.2) in
  1657. pub/ray.  Can you please comment back on it ?  Thanks.
  1658.  
  1659. So, here it is:
  1660.  
  1661. [Deleted here, again, as it's another 900+ lines of archive.  Check USENET,
  1662. write George or me, or ftp it as above to get a copy.  What follows are
  1663. excerpts from his README file.]
  1664.  
  1665.     Here is a simple ray tracing program developed here at RPI.  It
  1666. incorporates shadows, reflections and refraction together with one
  1667. non-directional light source.  The light source can diffuse on the surfaces
  1668. and can also give specular reflections.  The illumination model used is
  1669. by Phong.  The only objects supported right now are spheres, but the data
  1670. structure can be easily expanded to incorporate more objects.
  1671.  
  1672. [...]
  1673.  
  1674.     The ray tracer is written so it can be easily understood (at least
  1675. that version), and it is fully commented.  Nevertheless, probably it won't
  1676. be understood by a newcomer.  
  1677.  
  1678. [...]
  1679.  
  1680.     Can you please inform me with any bugs that the program might have
  1681. or any features that you want the upcoming versions to have.  This software
  1682. was written by me, and the subsequent version will probably by produced
  1683. by other members of the RPI chapter of the ACM.
  1684.                         Good luck!
  1685.  
  1686.     George Kyriazis
  1687.     kyriazis@turing.cs.rpi.edu
  1688.  
  1689. ----------------------------------------------------------------------------
  1690.  
  1691. New Bitmaps Library Available, Jef Poskanzer
  1692.  
  1693. Reply-To: Jef Poskanzer <jef@rtsg.ee.lbl.gov>
  1694. Organization: Paratheo-Anametamystikhood Of Eris Esoteric, Ada Lovelace Cabal
  1695.  
  1696. The third release of the Portable Bitmap package is ready for FTPing
  1697. from expo.lcs.mit.edu:contrib/pbm.tar.Z.
  1698.  
  1699. Answers to some frequently asked questions:
  1700.  - The decimal address of expo is 18.30.0.212.
  1701.  - Please avoid ftp'ing from expo.lcs.mit.edu in between the hours of
  1702.    9am and 6pm east coast, USA time.  
  1703.  - There may be other places to FTP it from, but I don't know of them.
  1704.    In particular, you can't FTP it from lbl-rtsg.  Don't even try.
  1705.  - Don't forget to set binary mode when you do the FTP.
  1706.  - Pbmtorast and rasttopbm depend on Sun's pixrect library, and will
  1707.    compile only on suns.
  1708.  - Currently there is no way to get the package other than FTP.  However,
  1709.    if comp.sources.misc ever gets going again, perhaps PBM will get
  1710.    distributed there.  (I have sent mail to the moderator about it, and
  1711.    have received no reply.)
  1712.  
  1713. Appended is the README for PBM.  It includes a list of the major enhancements
  1714. in this version.
  1715. ---
  1716. Jef
  1717.  
  1718. - - - - - - - - - -
  1719.  
  1720.                        Portable Bitmap Toolkit
  1721.                        Distribution of 31aug88
  1722.                     Previous distribution 04apr88
  1723.  
  1724.  
  1725. Included are a number of programs for converting various bitmap formats
  1726. to and from a portable format; plus some tools for manipulating the
  1727. portable bitmaps.
  1728.  
  1729. Major changes since the previous distribution:
  1730.     The pbm format now has a "magic number".
  1731.     New conversion filters brushtopbm, giftopbm, pbmtolj, pbmtomacp,
  1732.       pbmtoxwd, and pbmtox10wd.
  1733.     Icontopbm converter has a better parser -- it knows to skip over
  1734.       any extraneous comments at the beginning of the icon file.
  1735.     Pbmtops generates a different PostScript wrapper program -- it should
  1736.       handle huge bitmaps better.
  1737.     Xwdtopbm now handles byte-swapping correctly.
  1738.     Pbmmake takes a flag to specify the color of the new bitmap.
  1739.     Pbmpaste now implements 'or', 'and', and 'xor' operations as well
  1740.       as the default 'replace'.
  1741. Plus various minor bug fixes and enhancements.
  1742.  
  1743.  
  1744. Files in this distribution:
  1745.  
  1746.     README        this
  1747.     FORMATS        descriptions of the various bitmap formats
  1748.     Makefile        guess
  1749.  
  1750.     brushtopbm.c    convert from Xerox doodle brushes to portable bitmap
  1751.     cbmtopbm.c        convert from compact bitmap to portable bitmap
  1752.     giftopbm.c        convert from GIF to portable bitmap
  1753.     icontopbm.c        convert from Sun icon to portable bitmap
  1754.     macptopbm.c        convert from MacPaint to portable bitmap
  1755.     rasttopbm.c        convert from Sun raster to portable bitmap
  1756.     xbmtopbm.c        convert from X10 or X11 bitmap to portable bitmap
  1757.     xwdtopbm.c        convert from X10 or X11 window dump to portable bitmap
  1758.     xxxtopbm.c        convert from UNKNOWN BITMAP to portable bitmap
  1759.  
  1760.     pbmtoascii.c    convert from portable bitmap to ASCII graphic form
  1761.     pbmtocbm.c        convert from portable bitmap to compact bitmap
  1762.     pbmtoicon.c        convert from portable bitmap to Sun icon
  1763.     pbmtolj.c        convert from portable bitmap to HP LaserJet
  1764.     pbmtomacp.c        convert from portable bitmap to MacPaint
  1765.     pbmtops.c        convert from portable bitmap to PostScript
  1766.     pbmtoptx.c        convert from portable bitmap to Printronix
  1767.     pbmtorast.c        convert from portable bitmap to Sun raster
  1768.     pbmtoxbm.c        convert from portable bitmap to X11 bitmap
  1769.     pbmtox10bm.c    convert from portable bitmap to X10 bitmap
  1770.     pbmtoxwd.c        convert from portable bitmap to X11 window dump
  1771.     pbmtox10wd.c    convert from portable bitmap to X10 window dump
  1772.  
  1773.     pbmcatlr.c        concatenate portable bitmaps left to right
  1774.     pbmcattb.c        concatenate portable bitmaps top to bottom
  1775.     pbmcrop.c        crop a portable bitmap
  1776.     pbmcut.c        cut a rectangle out of a portable bitmap
  1777.     pbmenlarge.c    enlarge a portable bitmap N times
  1778.     pbmfliplr.c        flip a portable bitmap left for right
  1779.     pbmfliptb.c        flip a portable bitmap top for bottom
  1780.     pbminvert.c        invert a portable bitmap
  1781.     pbmmake.c        create a blank bitmap of a specified size
  1782.     pbmpaste.c        paste a rectangle into a portable bitmap
  1783.     pbmtrnspos.c    transpose a portable bitmap x for y
  1784.  
  1785.     libpbm.c        a few utility routines
  1786.     pbm.h        header file for libpbm
  1787.     macp.h        definitions for MacPaint files
  1788.     x10wd.h        definitions for X10 window dumps
  1789.     x11wd.h        definitions for X11 window dumps
  1790.     bmaliases        csh script to make aliases for converting formats
  1791.     *.1            manual entries for all of the tools
  1792.     pbm.5        manual entry for the pbm format
  1793.     bitreverse.h    useful include file
  1794.  
  1795.  
  1796. Unpack the files, edit Makefile and change the options to suit,
  1797. make, and enjoy!  Note that if you're not on a Sun, you won't be
  1798. able to compile rasttopbm and pbmtorast.
  1799.  
  1800. I've tested this stuff under 4.2 BSD, 4.3 BSD, and System V rel 2,
  1801. and on both Suns and Vaxen.  Nevertheless, I'm sure bugs remain.
  1802. Feedback is welcome - send bug reports, enhancements, checks, money
  1803. orders, etc. to the addresses below.
  1804.  
  1805.  
  1806.     Jef Poskanzer
  1807.     jef@rtsg.ee.lbl.gov
  1808.     {ucbvax, lll-crg, sun!pacbell, apple, hplabs}!well!pokey
  1809.  
  1810. -----------------------------------------------------------------------------
  1811.  
  1812. END OF RTNEWS
  1813.